﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using SGAEntidades;
using System.Text;
using SGALogicaNegocio;
using System.Collections.Generic;

namespace webSGA
{
    public partial class wfHojaRuta : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                lblUsuario.Text = Context.User.Identity.Name;
                Util.Util.CargarDepartamentos(cboDepartamento, true);
                Util.Util.CargarEstadoSolicitud(cboEstadoHojaRuta, true);
                Util.Util.CargarEstadoSolicitud(cboEstadoConsultaHR, true);
                hfAccion.Value = "N";
                btnGrabar.Enabled = true;
                cboEstadoHojaRuta.SelectedValue = "01";
                Session["DetalleHojaRuta"] = null;
            }
        }

        protected void btnCerrarSesion_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut();
            Response.Redirect("Login.aspx");
        }

        protected void btnBuscarEmpleado_Click(object sender, EventArgs e)
        {
            var oEntEmpleado = new Empleado().Consultar(new EmpleadoInfo("00001"));

            if (!String.IsNullOrEmpty(oEntEmpleado.IdEmpleado))
            {
                txtIdEmpleado.Text = oEntEmpleado.IdEmpleado;
                txtNombreEmpleado.Text = oEntEmpleado.Nombre;
                txtAreaEmpleado.Text = oEntEmpleado.Area.Descripcion;
            }
            else
            {
                Util.Util.AlternarMensaje(false, "No se encontró al empledo indicado.", alertaError, alertaExito, lblError, lblExito);
            }
        }

        protected void btnBuscarVehiculo_Click(object sender, EventArgs e)
        {

            gvConsultaVehiculo.DataSource = null;
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalBusquedaVehiculo').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            Util.Util.CargarProvincias(cboDepartamento, cboProvincia, null, true);
        }

        protected void btnAgregarRuta_Click(object sender, EventArgs e)
        {
            try
            {
                if (cboDepartamento.SelectedValue.Equals("-1") || cboProvincia.SelectedValue.Equals("-1"))
                {
                    Util.Util.AlternarMensaje(false, "Seleccione el Departamento y Provincia antes de agregar una ruta nueva.", alertaError, alertaExito,
                                  lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                }
                else
                {
                    var oDetalleHojaRuta = new List<HojaRutaDetalleInfo>();
                    if (Session["DetalleHojaRuta"] != null)
                    {
                        oDetalleHojaRuta = (List<HojaRutaDetalleInfo>)Session["DetalleHojaRuta"];
                    }
                    var oEntDetalle = new HojaRutaDetalleInfo(null, null, null, null,
                                                              !String.IsNullOrEmpty(hfUltimoIdDistrito.Value)
                                                                  ? hfUltimoIdDistrito.Value
                                                                  : null,
                                                              new UbigeoInfo(null, null,
                                                                             !String.IsNullOrEmpty(hfUltimoIdDistrito.Value)
                                                                                 ? hfUltimoIdDistrito.Value
                                                                                 : null,
                                                                             !String.IsNullOrEmpty(hfUltimoDistrito.Value)
                                                                                 ? hfUltimoDistrito.Value
                                                                                 : null), null, new UbigeoInfo(), null, null,
                                                              null, null);

                    if (!String.IsNullOrEmpty(hfUltimoKm.Value))
                        oEntDetalle.KmInicial = Double.Parse(hfUltimoKm.Value);

                    oDetalleHojaRuta.Add(oEntDetalle);
                    Session["DetalleHojaRuta"] = oDetalleHojaRuta;
                    Bind();
                }

            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        private void Bind()
        {
            var oDetalleHojaRuta = new List<HojaRutaDetalleInfo>();
            if (Session["DetalleHojaRuta"] != null)
            {
                oDetalleHojaRuta = (List<HojaRutaDetalleInfo>)Session["DetalleHojaRuta"];
            }

            Session["DetalleHojaRuta"] = oDetalleHojaRuta;
            gvRuta.DataSource = oDetalleHojaRuta;
            gvRuta.DataBind();

        }

        protected void gvRuta_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvRuta.EditIndex = e.NewEditIndex;
            Bind();
        }

        protected void gvRuta_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //GridViewRow row = (GridViewRow)gvRuta.Rows[e.Row.FindControl()];

                var cboDistritoOrigenG = (DropDownList)e.Row.FindControl("cboDistritoOrigenG");
                var cboDistritoDestinoG = (DropDownList)e.Row.FindControl("cboDistritoDestinoG");
                //var lblDistritoG = (Label) e.Row.FindControl("lblDistritoG");
                if (cboDistritoOrigenG != null && cboDistritoDestinoG != null)
                {
                    Util.Util.CargarDistritos(cboDepartamento, cboProvincia, cboDistritoOrigenG, true);
                    Util.Util.CargarDistritos(cboDepartamento, cboProvincia, cboDistritoDestinoG, true);

                    if (!String.IsNullOrEmpty(hfUltimoIdDistrito.Value))
                        cboDistritoOrigenG.SelectedValue = hfUltimoIdDistrito.Value;
                }
            }
        }

        protected void gvRuta_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvRuta.EditIndex = -1;
            Bind();
        }

        protected void gvRuta_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                var fila = gvRuta.Rows[e.RowIndex];
                var nFila = e.RowIndex + 1;

                var lblItemG = (Label)fila.FindControl("lblItemG");
                var cboDistritoOrigenG = (DropDownList)fila.FindControl("cboDistritoOrigenG");
                var cboDistritoDestinoG = (DropDownList)fila.FindControl("cboDistritoDestinoG");
                var txtKmInicialG = (TextBox)fila.FindControl("txtKmInicialG");
                var txtKmFinalG = (TextBox)fila.FindControl("txtKmFinalG");
                var chkUsoPersonalG = (CheckBox)fila.FindControl("chkUsoPersonalG");
                var txtVisitaG = (TextBox)fila.FindControl("txtVisitaG");
                var txtObservacionG = (TextBox)fila.FindControl("txtObservacionG");

                if (!Util.Util.EsNumerico(txtKmInicialG.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar un kilometraje inicial válido.", alertaError, alertaExito, lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                    return;
                }

                if (!Util.Util.EsNumerico(txtKmFinalG.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar un kilometraje final válido.", alertaError, alertaExito, lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                    return;
                }

                if (cboDistritoOrigenG.SelectedValue.Equals("-1"))
                {
                    Util.Util.AlternarMensaje(false, "Debe seleccionar un distrito de origen.", alertaError, alertaExito, lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                    return;
                }

                if (cboDistritoDestinoG.SelectedValue.Equals("-1"))
                {
                    Util.Util.AlternarMensaje(false, "Debe seleccionar un distrito de destino.", alertaError, alertaExito, lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                    return;
                }

                var oDetalleHojaRuta = new List<HojaRutaDetalleInfo>();
                if (Session["DetalleHojaRuta"] != null)
                {
                    oDetalleHojaRuta = (List<HojaRutaDetalleInfo>)Session["DetalleHojaRuta"];
                }

                for (int i = 0; i <= oDetalleHojaRuta.Count - 1; i++)
                {
                    if (!oDetalleHojaRuta[i].Item.HasValue)
                    {
                        oDetalleHojaRuta[i].Item = nFila;
                        oDetalleHojaRuta[i].KmInicial = Double.Parse(txtKmInicialG.Text);
                        oDetalleHojaRuta[i].KmFinal = Double.Parse(txtKmFinalG.Text);
                        oDetalleHojaRuta[i].IdDistritoOrigen = cboDistritoOrigenG.SelectedValue;
                        oDetalleHojaRuta[i].DistritoOrigen.IdDistrito = cboDistritoOrigenG.SelectedValue;
                        oDetalleHojaRuta[i].DistritoOrigen.Descripcion = cboDistritoOrigenG.SelectedItem.Text;
                        oDetalleHojaRuta[i].IdDistritoDestino = cboDistritoDestinoG.SelectedValue;
                        oDetalleHojaRuta[i].DistritoDestino.IdDistrito = cboDistritoDestinoG.SelectedValue;
                        oDetalleHojaRuta[i].DistritoDestino.Descripcion = cboDistritoDestinoG.SelectedItem.Text;
                        oDetalleHojaRuta[i].UsoPersonal = chkUsoPersonalG.Checked ? "1" : "0";
                        oDetalleHojaRuta[i].Visita = txtVisitaG.Text;
                        oDetalleHojaRuta[i].Observacion = txtObservacionG.Text;

                        CalcularKm(oDetalleHojaRuta[i].KmInicial, oDetalleHojaRuta[i].KmFinal, oDetalleHojaRuta[i].UsoPersonal);
                        hfUltimoIdDistrito.Value = cboDistritoDestinoG.SelectedValue;
                        hfUltimoDistrito.Value = cboDistritoDestinoG.SelectedItem.Text;
                        hfUltimoKm.Value = txtKmFinalG.Text;
                    }
                    else
                    {
                        if (!String.IsNullOrEmpty(lblItemG.Text))
                        {
                            if (oDetalleHojaRuta[i].Item == Int32.Parse(lblItemG.Text))
                            {
                                oDetalleHojaRuta[i].KmInicial = Double.Parse(txtKmInicialG.Text);
                                oDetalleHojaRuta[i].KmFinal = Double.Parse(txtKmFinalG.Text);
                                oDetalleHojaRuta[i].IdDistritoOrigen = cboDistritoOrigenG.SelectedValue;
                                oDetalleHojaRuta[i].DistritoOrigen.IdDistrito = cboDistritoOrigenG.SelectedValue;
                                oDetalleHojaRuta[i].DistritoOrigen.Descripcion = cboDistritoOrigenG.SelectedItem.Text;
                                oDetalleHojaRuta[i].IdDistritoDestino = cboDistritoDestinoG.SelectedValue;
                                oDetalleHojaRuta[i].DistritoDestino.IdDistrito = cboDistritoDestinoG.SelectedValue;
                                oDetalleHojaRuta[i].DistritoDestino.Descripcion = cboDistritoDestinoG.SelectedItem.Text;
                                oDetalleHojaRuta[i].UsoPersonal = chkUsoPersonalG.Checked ? "1" : "0";
                                oDetalleHojaRuta[i].Visita = txtVisitaG.Text;
                                oDetalleHojaRuta[i].Observacion = txtObservacionG.Text;

                                CalcularKm(oDetalleHojaRuta[i].KmInicial, oDetalleHojaRuta[i].KmFinal, oDetalleHojaRuta[i].UsoPersonal);
                                hfUltimoIdDistrito.Value = cboDistritoOrigenG.SelectedValue;
                                hfUltimoDistrito.Value = cboDistritoDestinoG.SelectedItem.Text;
                                hfUltimoKm.Value = txtKmFinalG.Text;
                            }
                        }
                    }


                }
                Session["DetalleHojaRuta"] = oDetalleHojaRuta;
                gvRuta.EditIndex = -1;
                Bind();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error al actualizar la ruta: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
                UpdatePanel2.Update();
                ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
            }

        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarModalConfirmacion();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        private void MostrarModalConfirmacion()
        {
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConfirmacion').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        private void GrabarHojaRuta()
        {
            try
            {
                if (String.IsNullOrEmpty(txtIdEmpleado.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe seleccionar el empleado.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
                if (String.IsNullOrEmpty(txtPlacaVehiculo.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe seleccionar el vehículo.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (String.IsNullOrEmpty(txtFechaInicio.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe indicar la fecha de inicio de la hoja de ruta.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (String.IsNullOrEmpty(txtFechaFin.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe indicar la fecha de término de la hoja de ruta.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (!Util.Util.EsFechaValida(txtFechaInicio.Text))
                {
                    Util.Util.AlternarMensaje(false, "La fecha de inicio no tiene un formato válido. Debe ser dd/mm/yyyy.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (!Util.Util.EsFechaValida(txtFechaFin.Text))
                {
                    Util.Util.AlternarMensaje(false, "La fecha de término no tiene un formato válido. Debe ser dd/mm/yyyy.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (DateTime.Parse(txtFechaFin.Text) < DateTime.Parse(txtFechaInicio.Text))
                {
                    Util.Util.AlternarMensaje(false, "La fecha de fin de ruta no puede ser menor a la fecha de inicio de ruta.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (gvRuta.Rows.Count == 0)
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar al menos una línea de detalle en la hoja de ruta.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }

                if (hfAccion.Value.Equals("A"))
                {
                    if (cboEstadoHojaRuta.SelectedValue.Equals("03"))
                    {
                        Util.Util.AlternarMensaje(false, "La hoja de ruta ya se encuentra aprobada", alertaError, alertaExito, lblError, lblExito);
                        return;
                    }
                }

                var oEntHojaRuta = new HojaRutaInfo();
                var oDetalleHojaRuta = new List<HojaRutaDetalleInfo>();
                var sIdHojaRuta = "";

                oEntHojaRuta.IdEmpleado = txtIdEmpleado.Text;
                oEntHojaRuta.Placa = txtPlacaVehiculo.Text;
                oEntHojaRuta.FechaInicio = Convert.ToDateTime(txtFechaInicio.Text);
                oEntHojaRuta.FechaFin = Convert.ToDateTime(txtFechaFin.Text);
                oEntHojaRuta.IdDepartamento = cboDepartamento.SelectedValue;
                oEntHojaRuta.IdProvincia = cboProvincia.SelectedValue;
                oEntHojaRuta.TotalKm = Double.Parse(txtKmRecorrido.Text);
                oEntHojaRuta.TotalKmEmpresa = Double.Parse(txtKmEmpresa.Text);
                oEntHojaRuta.TotalKmPersonal = Double.Parse(txtKmPersonal.Text);
                oEntHojaRuta.GalonesAsignados = Double.Parse(txtTotalGalones.Text);
                oEntHojaRuta.Observaciones = txtObservaciones.Text;
                oEntHojaRuta.IdEstado = cboEstadoHojaRuta.SelectedValue;
                oEntHojaRuta.UsuarioSistema = Context.User.Identity.Name;

                if (Session["DetalleHojaRuta"] != null)
                {
                    oDetalleHojaRuta = (List<HojaRutaDetalleInfo>)Session["DetalleHojaRuta"];
                }

                oEntHojaRuta.DetalleRuta = oDetalleHojaRuta;
                if (hfAccion.Value.Equals("N"))
                {
                    if (new HojaRuta().Registrar(oEntHojaRuta, ref sIdHojaRuta))
                    {
                        Util.Util.AlternarMensaje(true, "Se registró la hoja de ruta con éxito.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        txtIdHojaRuta.Text = sIdHojaRuta;
                        ActivarDesactivarCampos(false);
                        CargarHojaRuta(txtIdHojaRuta.Text);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se registró la hoja de ruta.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
                if (hfAccion.Value.Equals("M"))
                {
                    oEntHojaRuta.IdHojaRuta = txtIdHojaRuta.Text;
                    if (new HojaRuta().Actualizar(oEntHojaRuta))
                    {
                        Util.Util.AlternarMensaje(true, "Se actualizó la hoja de ruta con éxito.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        ActivarDesactivarCampos(false);
                        CargarHojaRuta(txtIdHojaRuta.Text);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se actualizó la hoja de ruta.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
                if (hfAccion.Value.Equals("A"))
                {
                    oEntHojaRuta.IdHojaRuta = txtIdHojaRuta.Text;
                    oEntHojaRuta.IdEstado = "03";
                    oEntHojaRuta.UsuarioAprobacion = Context.User.Identity.Name;
                    if (new HojaRuta().Aprobar(oEntHojaRuta))
                    {
                        Util.Util.AlternarMensaje(true, "Se aprobó la hoja de ruta con éxito.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        ActivarDesactivarCampos(false);
                        CargarHojaRuta(txtIdHojaRuta.Text);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se aprobó la hoja de ruta.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error al actualizar la ruta: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
                UpdatePanel2.Update();
                ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
            }
        }

        private void ActivarDesactivarCampos(Boolean bEstado)
        {
            if (!hfAccion.Value.Equals("M"))
                txtIdHojaRuta.Enabled = bEstado;
            cboEstadoHojaRuta.Enabled = bEstado;
            cboDepartamento.Enabled = bEstado;
            cboProvincia.Enabled = bEstado;
            txtFechaInicio.Enabled = bEstado;
            txtFechaFin.Enabled = bEstado;
            txtObservaciones.Enabled = bEstado;
            btnAgregarRuta.Enabled = bEstado;
            btnQuitaRuta.Enabled = bEstado;
            btnBuscarEmpleado.Enabled = bEstado;
            btnBuscarVehiculo.Enabled = bEstado;
            btnGrabar.Enabled = bEstado;
        }

        private void CalcularKm(Double? nKmInicial, Double? nKmFinal, String sFlagPersonal)
        {
            Double? nTotalKm = String.IsNullOrEmpty(txtKmRecorrido.Text) ? 0 : Double.Parse(txtKmRecorrido.Text);
            Double? nTotalKmEmpresa = String.IsNullOrEmpty(txtKmEmpresa.Text) ? 0 : Double.Parse(txtKmEmpresa.Text);
            Double? nTotalKmPersonal = String.IsNullOrEmpty(txtKmPersonal.Text) ? 0 : Double.Parse(txtKmPersonal.Text);
            Double? nKmGalonVehiculo = String.IsNullOrEmpty(txtGalonesKm.Text) ? 0 : Double.Parse(txtGalonesKm.Text);

            Double? nKmEmpresa = 0;
            Double? nKmPersonal = 0;
            Double? nGalones = 0;

            if (sFlagPersonal.Equals("0"))
                nKmEmpresa = (nKmFinal - nKmInicial);
            else
                nKmPersonal = (nKmFinal - nKmInicial);

            nTotalKmEmpresa += nKmEmpresa;
            nTotalKmPersonal += nKmPersonal;
            nTotalKm += (nKmPersonal + nKmEmpresa);
            nGalones = nTotalKmEmpresa / nKmGalonVehiculo;

            txtKmRecorrido.Text = String.Format("{0:0.00}", nTotalKm);
            txtKmEmpresa.Text = String.Format("{0:0.00}", nTotalKmEmpresa);
            txtKmPersonal.Text = String.Format("{0:0.00}", nTotalKmPersonal);
            txtTotalGalones.Text = String.Format("{0:0.00}", nGalones);

        }

        protected void btnSiGrabar_Click(object sender, EventArgs e)
        {
            GrabarHojaRuta();
        }


        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            hfAccion.Value = "N";
            ActivarDesactivarCampos(true);
            LimpiarCampos();
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            hfAccion.Value = "M";
            ActivarDesactivarCampos(true);
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            if (hfAccion.Value.Equals("N"))
                LimpiarCampos();
            else
                ActivarDesactivarCampos(false);
            hfAccion.Value = "";
        }

        protected void btnAprobar_Click(object sender, EventArgs e)
        {
            hfAccion.Value = "A";
            MostrarModalConfirmacion();
        }

        private void LimpiarCampos()
        {
            txtIdHojaRuta.Text = "";
            cboEstadoHojaRuta.SelectedValue = "01";
            txtIdEmpleado.Text = "";
            txtNombreEmpleado.Text = "";
            txtAreaEmpleado.Text = "";
            txtPlacaVehiculo.Text = "";
            txtTipoCombustible.Text = "";
            txtTipoCombustibleDesc.Text = "";
            txtGalonesKm.Text = "";
            txtFechaInicio.Text = "";
            txtFechaFin.Text = "";
            cboDepartamento.SelectedValue = "-1";
            cboProvincia.Items.Clear();
            txtKmRecorrido.Text = "";
            txtKmPersonal.Text = "";
            txtKmEmpresa.Text = "";
            txtGalonesKm.Text = "";
            txtObservaciones.Text = "";
            hfAccion.Value = "N";
            hfUltimoDistrito.Value = null;
            hfUltimoIdDistrito.Value = null;
            hfUltimoDistrito.Value = null;
            gvRuta.DataSource = null;
            Session["DetalleHojaRuta"] = null;
            gvRuta.DataBind();
        }

        protected void btnBuscarHojaRuta_Click(object sender, EventArgs e)
        {
            //if (!String.IsNullOrEmpty(txtIdHojaRuta.Text))
            //{
            //    CargarHojaRuta(txtIdHojaRuta.Text);
            //    ActivarDesactivarCampos(false);
            //}
            //else
            //{
            //    Util.Util.AlternarMensaje(false, "No se indicó un código de hoja de ruta para mostrar.", alertaError, alertaExito,
            //              lblError, lblExito);
            //}
            gvConsultaVehiculo.DataSource = null;
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalBusquedaHojaRuta').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        private void CargarHojaRuta(String sIdHojaRuta)
        {
            var oEntHojaRuta = new HojaRutaInfo(sIdHojaRuta, null, null, null, null, null, null, null);
            oEntHojaRuta = new HojaRuta().Consultar(oEntHojaRuta);

            if (oEntHojaRuta.IdEmpleado != null)
            {
                txtIdHojaRuta.Text = oEntHojaRuta.IdHojaRuta;
                cboEstadoHojaRuta.SelectedValue = oEntHojaRuta.IdEstado;
                txtIdEmpleado.Text = oEntHojaRuta.IdEmpleado;
                txtNombreEmpleado.Text = oEntHojaRuta.Empleado.Nombre;
                txtAreaEmpleado.Text = oEntHojaRuta.Empleado.Area.Descripcion;
                txtPlacaVehiculo.Text = oEntHojaRuta.Placa;
                txtTipoCombustible.Text = oEntHojaRuta.Vehiculo.IdTipoCombustible;
                txtTipoCombustibleDesc.Text = oEntHojaRuta.Vehiculo.TipoCombustible.Descripcion;
                txtGalonesKm.Text = String.Format("{0:0.00}", oEntHojaRuta.Vehiculo.GalonesXKm);
                if (oEntHojaRuta.FechaInicio != null)
                    txtFechaInicio.Text = oEntHojaRuta.FechaInicio.Value.ToShortDateString();
                if (oEntHojaRuta.FechaFin != null) txtFechaFin.Text = oEntHojaRuta.FechaFin.Value.ToShortDateString();
                cboDepartamento.SelectedValue = oEntHojaRuta.IdDepartamento;
                Util.Util.CargarProvincias(cboDepartamento, cboProvincia, null, true);
                cboProvincia.SelectedValue = oEntHojaRuta.IdProvincia;
                txtKmRecorrido.Text = String.Format("{0:0.00}", oEntHojaRuta.TotalKm);
                txtKmEmpresa.Text = String.Format("{0:0.00}", oEntHojaRuta.TotalKmEmpresa);
                txtKmPersonal.Text = String.Format("{0:0.00}", oEntHojaRuta.TotalKmPersonal);
                txtTotalGalones.Text = String.Format("{0:0.00}", oEntHojaRuta.GalonesAsignados);
                txtObservaciones.Text = oEntHojaRuta.Observaciones;

                oEntHojaRuta.DetalleRuta =
                    new HojaRutaDetalle().Listar(new HojaRutaDetalleInfo(oEntHojaRuta.IdHojaRuta));
                Session["DetalleHojaRuta"] = oEntHojaRuta.DetalleRuta;
                Bind();
            }
            else
                Util.Util.AlternarMensaje(false, "No se encontró la hoja de ruta indicada.", alertaError, alertaExito,
                                          lblError, lblExito);
        }

        protected void gvConsultaVehiculo_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaVehiculo.DataKeys[index];
                String sPlaca = "";
                if (dataKey != null)
                {
                    sPlaca = dataKey.Value.ToString();
                }

                if (e.CommandName.Equals("Seleccionar"))
                {
                    CargarVehiculo(sPlaca);

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalBusquedaVehiculo').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }

        private void CargarVehiculo(String sIdPlaca)
        {
            var oEntVehiculo = new VehiculoInfo(sIdPlaca);
            oEntVehiculo = new Vehiculo().Consultar(oEntVehiculo);

            if (oEntVehiculo.Placa != null)
            {
                txtPlacaVehiculo.Text = oEntVehiculo.Placa;
                txtTipoCombustible.Text = oEntVehiculo.IdTipoCombustible;
                txtTipoCombustibleDesc.Text = oEntVehiculo.TipoCombustible.Descripcion;
                txtGalonesKm.Text = String.Format("{0:0.00}", oEntVehiculo.GalonesXKm);

            }
            else
            {
                Util.Util.AlternarMensaje(false, "No se encontró el vehículo indicado.", alertaError, alertaExito,
                          lblError, lblExito);
            }
        }

        protected void btnConsultarVehiculo_Click(object sender, EventArgs e)
        {
            String sPlaca = String.IsNullOrEmpty(txtPlacaConsulta.Text.Trim()) ? null : txtPlacaConsulta.Text.Trim();
            String sTarjetaPropiedad = String.IsNullOrEmpty(txtTarjetaPropiedadConsulta.Text.Trim())
                                           ? null
                                           : txtTarjetaPropiedadConsulta.Text.Trim();
            String sPoliza = String.IsNullOrEmpty(txtPolizaConsulta.Text.Trim()) ? null : txtPolizaConsulta.Text.Trim();

            gvConsultaVehiculo.DataSource = new Vehiculo().Listar(new VehiculoInfo(sPlaca, sTarjetaPropiedad, sPoliza));
            gvConsultaVehiculo.DataBind();
        }

        protected void btnConsultarHR_Click(object sender, EventArgs e)
        {
            String sPlaca = String.IsNullOrEmpty(txtPlacaConsultaHR.Text.Trim()) ? null : txtPlacaConsultaHR.Text.Trim();
            String sEmpleado = String.IsNullOrEmpty(txtEmpleadoConsultaHR.Text.Trim())
                                   ? null
                                   : txtEmpleadoConsultaHR.Text.Trim();
            String sEstado = cboEstadoConsultaHR.SelectedValue.Equals("-1") ? null : cboEstadoConsultaHR.SelectedValue;
            DateTime? dFechaInicioDesde;
            DateTime? dFechaInicioHasta;
            DateTime? dFechaFinDesde;
            DateTime? dFechaFinHasta;

            if (String.IsNullOrEmpty(txtFechaInicioDesde.Text.Trim()))
                dFechaInicioDesde = null;
            else
                dFechaInicioDesde = DateTime.Parse(txtFechaInicioDesde.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaInicioHasta.Text.Trim()))
                dFechaInicioHasta = null;
            else
                dFechaInicioHasta = DateTime.Parse(txtFechaInicioHasta.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaFinDesde.Text.Trim()))
                dFechaFinDesde = null;
            else
                dFechaFinDesde = DateTime.Parse(txtFechaFinDesde.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaFinHasta.Text.Trim()))
                dFechaFinHasta = null;
            else
                dFechaFinHasta = DateTime.Parse(txtFechaFinHasta.Text.Trim());

            var oResultado = new HojaRuta().Listar(new HojaRutaInfo(null, sEmpleado, sPlaca, dFechaInicioDesde, dFechaInicioHasta,
                                                       dFechaFinDesde, dFechaFinHasta, sEstado));

            if (oResultado.Count == 0)
                oResultado.Add(new HojaRutaInfo());
            gvConsultaHR.DataSource = oResultado;
                
            gvConsultaHR.DataBind();
        }

        protected void gvConsultaHR_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaHR.DataKeys[index];
                String sIdHojaRuta = "";
                if (dataKey != null)
                {
                    sIdHojaRuta = dataKey.Value.ToString();
                }

                if (e.CommandName.Equals("Seleccionar"))
                {
                    CargarHojaRuta(sIdHojaRuta);
                    ActivarDesactivarCampos(false);

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalBusquedaHojaRuta').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }

        protected void btnQuitaRuta_Click(object sender, EventArgs e)
        {

        }

    }
}